package donkeykong;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.io.File;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class Objeto extends JPanel implements Runnable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private Image imagenObjeto;
	
	private int posicionX;
	private int posicionY;
	
	private String nombreObjetoImagen;
	private boolean activo;

	private Mario mario;

	private Puntuacion_total score;

	private Puntuacion_imagen pi;

	private boolean mostrarPuntuacion;

	public Objeto(int i, int j, Mario m, String nombre, Puntuacion_total pt) {
		try{
		
		score=pt;
		mario = m;
		nombreObjetoImagen = nombre;
		setPosicionX(i);
		setPosicionY(j);
		imagenObjeto = ImageIO.read(new File("./images/objetos/"+nombreObjetoImagen+".png"));
		activo = true;
		
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	


	/** Funcion paintComponent que es propia de los JPanels, que sirve para dibujar en el mismo la imagen que se quiera, entre otras opciones **/
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		Graphics2D g2d = (Graphics2D) g;
		/** Para hacer operaciones complejas con una imagen, crear un AffineTransform **/
		if (!mostrarPuntuacion){
			g2d.drawImage(imagenObjeto,getPosicionX(),getPosicionY()-imagenObjeto.getHeight(null),null);
		}
		if (mostrarPuntuacion){
			pi.paintComponent(g);
		}
	}
	
	
	@Override
	public void run() {
		try{
		while ( true ){
			if (!isActivo()){
				break;
			}
			if (mostrarPuntuacion){
				Thread.sleep(100);
				Usar();
			}else{
				if ((mario.getCentroMario() > getPosicionX()) & (mario.getCentroMario() < getPosicionX()+imagenObjeto.getWidth(null))){
					if (( mario.getPosicion_y()-mario.getImage().getHeight(null) < getPosicionY() ) & ( mario.getPosicion_y() > getPosicionY() ) ){
						
						score.aņadirPuntuacion(puntuacion_objeto());
						
						//Usar();
						mostrarPuntuacion=true;
						pi = new Puntuacion_imagen(mario,nombreObjetoImagen);
						Thread t = new Thread(pi);
						t.start();
					}
				}
			}

			Thread.sleep(500);
			
		}

		
		}catch(Exception e){
			e.printStackTrace();
		}
	}

	


	private int puntuacion_objeto() {
		return (nombreObjetoImagen.equals("paraguas") ? 200 :  (nombreObjetoImagen.equals("bolso") ? 500 : 900 ) );
	}

	public int getPosicionX() {
		return posicionX;
	}


	public void setPosicionX(int posicionX) {
		this.posicionX = posicionX;
	}


	public int getPosicionY() {
		return posicionY;
	}


	public void setPosicionY(int posicionY) {
		this.posicionY = posicionY;
	}


	public boolean isActivo() {
		return activo;
	}

	public void Usar(){
		activo = false;
	}
	
}
